package com.plugin.sharding;

import com.google.common.base.Charsets;
import com.google.common.hash.Hashing;

/**
 * 业务相关工具类
 * @author zhouman
 *
 */
public class Utils {
	private static final long SHARDING_MODULE = 16L;

	/**
	 * 根据原始表名，和指定的字段计算出新的表名
	 * @param origin 原始的表名
	 * @param deviceId    修正值(hujiangid 或 deviceid)
	 * @return
	 */
	public static String genTableName(String origin, String deviceId){
		long fixed = Math.abs(
				Hashing.murmur3_128()
				.newHasher()
				.putString(deviceId, Charsets.UTF_8)
				.hash().hashCode() % SHARDING_MODULE
				);
		return origin + SymbolConstant.UDNER_LINE + fixed;
	}
	
	/**
	 * 根据device_id， 计算对应的分片值
	 * @param origin 原始的表名
	 * @param deviceId    修正值(hujiangid 或 deviceid)
	 * @return
	 */
	public static long getShardingIndex(String deviceId){
		long fixed = Math.abs(
				Hashing.murmur3_128()
				.newHasher()
				.putString(deviceId, Charsets.UTF_8)
				.hash().hashCode() % SHARDING_MODULE
				);
		return fixed;
	}
	
	/**
	 */
	public static String genTableName(String origin, Long id){
		long fixed = Math.abs(id % SHARDING_MODULE);
		return origin + SymbolConstant.UDNER_LINE + fixed;
	}
	
	/**
	 * 根据device_id， 计算对应的分片值
	 * @param origin 原始的表名
	 * @param deviceId    修正值(hujiangid 或 deviceid)
	 * @return
	 */
	public static long getShardingIndex(long id){
		return Math.abs(id % SHARDING_MODULE);
	}
	
}
